﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace OpticalPowerMeter
{
    /// <summary>
    /// 线性点校准
    /// </summary>
    public class LinearPoint
    {
        /// <summary>
        /// 校准点在仪表的档位，目前仪表有7档与8档两种。后续可能是4档
        /// 这部分本应该在MCU程序中实现，但由于历史原因，目前还是放在上位机中控制
        /// 这部分具体档位应由MCU开发人员提供响应的信息
        /// </summary>
        public int Index { set; get; } //索引号
        /// <summary>
        /// 第一个线性点的功率
        /// </summary>
        public double P1 { set; get; } //第一个点
        /// <summary>
        /// 第二个线性点的功率
        /// </summary>
        public double P2 { set; get; } //第二个点

        /// <summary>
        /// 重写父类的Equals方法
        /// </summary>
        /// <param name="obj">参与对比的另一个对象</param>
        /// <returns>是否一致</returns>
        public override bool Equals(object obj)
        {
            if (!obj.GetType().Name.EndsWith("LinearPoint"))
            {
                return false;
            }
            LinearPoint linear = obj as LinearPoint;
            return Equals(linear);
        }

        /// <summary>
        /// 重写Equals方法，对比对象的值是否一致
        /// </summary>
        /// <param name="other">参与对比的另一个Linear对象</param>
        /// <returns>是否一致</returns>
        public bool Equals(LinearPoint other) {
            return Index == other.Index && P1 == other.P1 && P2 == other.P2;
        }

        /// <summary>
        /// 重写获取hashCode的方法
        /// </summary>
        /// <returns>HashCode</returns>
        public override int GetHashCode()
        {
            return (Index, P1, P2).GetHashCode();
        }
    }
}
